package bd;

import java.sql.*;

/** Classe pTrab, encarregada da criação do painel de trabalho
 *
 */
public class pTrab extends javax.swing.JPanel {

    private String condicoes;
    private conecta bd;
    private frame principal;
    private ResultSet retorno;
    private boolean atualizacao;
    private String novaLinha;
    private painelTabelas painel;

   /** construtor da classe pTrab, encarregado de dar forma ao painel,
     * fazer a ligação com o banco de dados e com a janela principal
     */
    public pTrab(conecta bd, frame principal, painelTabelas painel) {
        initComponents();
        this.bd = bd;
        this.principal = principal;
        this.cancelaTrab.setVisible(false);
        this.painel = painel;
    }

    /** Método initComponents(). tem a função da criação da janela de trabalho,
     * criando botões, caixas de texto, etc. É o método que dá forma à janela.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buscaTrab = new javax.swing.JButton();
        insereTrab = new javax.swing.JButton();
        atualizaTrab = new javax.swing.JButton();
        removeTrab = new javax.swing.JButton();
        cancelaTrab = new javax.swing.JButton();
        jLabel18 = new javax.swing.JLabel();
        jLabel19 = new javax.swing.JLabel();
        jLabel20 = new javax.swing.JLabel();
        jLabel21 = new javax.swing.JLabel();
        jLabel22 = new javax.swing.JLabel();
        idDeTRAB = new javax.swing.JTextField();
        idFuTRAB = new javax.swing.JTextField();
        dataInicTrTRAB = new javax.swing.JTextField();
        dataFimTrTRAB = new javax.swing.JTextField();

        buscaTrab.setText("Buscar");
        buscaTrab.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buscaTrabActionPerformed(evt);
            }
        });

        insereTrab.setText("Inserir");
        insereTrab.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                insereTrabActionPerformed(evt);
            }
        });

        atualizaTrab.setText("Atualizar");
        atualizaTrab.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                atualizaTrabActionPerformed(evt);
            }
        });

        removeTrab.setText("Remover");
        removeTrab.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeTrabActionPerformed(evt);
            }
        });

        cancelaTrab.setText("Cancelar");
        cancelaTrab.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelaTrabActionPerformed(evt);
            }
        });

        jLabel18.setText("ID do Departamento:");

        jLabel19.setText("Entre com os dados:");

        jLabel20.setText("ID do Funcionário:");

        jLabel21.setText("Data de Contratação: ");

        jLabel22.setText("Data de Demissão: ");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 489, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(48, 48, 48)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(buscaTrab)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(insereTrab)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(atualizaTrab)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(removeTrab)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(cancelaTrab))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(jLabel19, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 321, Short.MAX_VALUE)
                                .addGroup(layout.createSequentialGroup()
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel22)
                                        .addComponent(jLabel21)
                                        .addComponent(jLabel18)
                                        .addComponent(jLabel20))
                                    .addGap(18, 18, 18)
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(idDeTRAB, javax.swing.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE)
                                        .addComponent(idFuTRAB, javax.swing.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE)
                                        .addComponent(dataFimTrTRAB, javax.swing.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE)
                                        .addComponent(dataInicTrTRAB, javax.swing.GroupLayout.DEFAULT_SIZE, 195, Short.MAX_VALUE))))
                            .addGap(72, 72, 72)))
                    .addGap(48, 48, 48)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 317, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabel19)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel18)
                        .addComponent(idDeTRAB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel20)
                        .addComponent(idFuTRAB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(12, 12, 12)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel21)
                        .addComponent(dataInicTrTRAB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel22)
                        .addComponent(dataFimTrTRAB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 148, Short.MAX_VALUE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(buscaTrab)
                        .addComponent(insereTrab)
                        .addComponent(atualizaTrab)
                        .addComponent(removeTrab)
                        .addComponent(cancelaTrab))
                    .addContainerGap()))
        );
    }// </editor-fold>//GEN-END:initComponents

    /** Trata eventos relacionados ao botão buscar.
     * Realiza a busca de acordo com determinado texto digitado, retornando
     * o resultado da pesquisa. Também trata erro.
     */
    private void buscaTrabActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscaTrabActionPerformed
        lerTrab();
        try {
            System.out.println(condicoes);
            retorno = bd.consulta("SELECT * FROM trabalho " + condicoes);
            this.principal.mostraBusca(retorno);
        } catch (SQLException ex) {
            bd.trataErro(ex);
        }
        limpaTela();
    }//GEN-LAST:event_buscaTrabActionPerformed

    /** Trata eventos relacionados ao botão insere.
     * Faz a inserção no banco de dados dos valores digitados no painel.
     */
    private void insereTrabActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_insereTrabActionPerformed
        bd.insercao("INSERT INTO trabalho(idDe, idFu, dataInicioTr)"
                + "VALUES (" + idDeTRAB.getText() + ", " + idFuTRAB.getText() + ", "
                + "TO_DATE('" + dataInicTrTRAB.getText() + "','DD.MM.YYYY'))");
        limpaTela();
    }//GEN-LAST:event_insereTrabActionPerformed

    /** Trata eventos relacionados ao botão atualiza. Quando o botão é pressionado,
     * é enviada uma mensagem de instruções para acontecer a atualização.
     * Recebe os dados digitados e atualiza no banco.
     */
    private void atualizaTrabActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_atualizaTrabActionPerformed
        if (atualizacao == false) {
            lerTrab();//fazer o teste para ver quantoas linhas irá atualizar
            jLabel19.setText("Entre com os novos dados e aperte atualizar novamente");
            mudaVisualizacaoTrab();
            limpaTela();
        } else if (atualizacao == true) {
            novaLinha = "SET";
            if (idFuTRAB.getText() != null && !idFuTRAB.getText().trim().equals("")) {
                novaLinha = novaLinha + " idFu = " + idFuTRAB.getText() + ", ";
            }
            if (idDeTRAB.getText() != null && !idDeTRAB.getText().trim().equals("")) {
                novaLinha = novaLinha + " idDe = " + idDeTRAB.getText() + ", ";
            }
            if (dataInicTrTRAB.getText() != null && !dataInicTrTRAB.getText().trim().equals("")) {
                novaLinha = novaLinha + " dataInicioTr = TO_DATE('" + dataInicTrTRAB.getText() + "', 'DD.MM.YYYY'), ";
            }
            if (dataFimTrTRAB.getText() != null && !dataFimTrTRAB.getText().trim().equals("")) {
                novaLinha = novaLinha + " dataFimTr = TO_DATE('" + dataFimTrTRAB.getText() + "', 'DD.MM.YYYY'), ";
            }
            novaLinha = novaLinha.substring(0, novaLinha.length() - 2);
            bd.atualiza("UPDATE trabalho " + novaLinha + " " + condicoes);
            jLabel19.setText("Entre com os dados:");
            mudaVisualizacaoTrab();
            condicoes = null;
            novaLinha = null;
            limpaTela();
        }
    }//GEN-LAST:event_atualizaTrabActionPerformed

    /** Trata eventos relacionados ao botão remove.
     * Remove determinada tupla selecionada. trata erros
     */
    private void removeTrabActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeTrabActionPerformed
        novaLinha = "trabalho";//novaLinha esta sendo usada para parametrizar a exclusão pelo outro painel
        lerTrab();
        try {
            retorno = bd.consulta("SELECT * FROM " + novaLinha + " " + condicoes);
            this.painel.novaLinha = novaLinha;
            this.painel.condicoes = condicoes;
        } catch (SQLException ex) {
            System.out.println("Erro " + ex);
        }
        this.principal.BuscaParaRemover(retorno);
        limpaTela();
    }//GEN-LAST:event_removeTrabActionPerformed

    /** Trata eventos relacionados ao botão cancelar.
     * Ajusta o label da janela, volta pra janela principal e limpa os campos
     */
    private void cancelaTrabActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelaTrabActionPerformed
        jLabel19.setText("Entre com os dados:");
        mudaVisualizacaoTrab();
        condicoes = null;
        novaLinha = null;
        limpaTela();
    }//GEN-LAST:event_cancelaTrabActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton atualizaTrab;
    private javax.swing.JButton buscaTrab;
    private javax.swing.JButton cancelaTrab;
    private javax.swing.JTextField dataFimTrTRAB;
    private javax.swing.JTextField dataInicTrTRAB;
    private javax.swing.JTextField idDeTRAB;
    private javax.swing.JTextField idFuTRAB;
    private javax.swing.JButton insereTrab;
    private javax.swing.JLabel jLabel18;
    private javax.swing.JLabel jLabel19;
    private javax.swing.JLabel jLabel20;
    private javax.swing.JLabel jLabel21;
    private javax.swing.JLabel jLabel22;
    private javax.swing.JButton removeTrab;
    // End of variables declaration//GEN-END:variables

    /** limpa os campos.
     */
    private void limpaTela() {
        dataFimTrTRAB.setText(null);
        dataInicTrTRAB.setText(null);
        idDeTRAB.setText(null);
        idFuTRAB.setText(null);
    }

    /** Método que muda a visualização da janela de trabalho
     */
    private void mudaVisualizacaoTrab() {
        cancelaTrab.setVisible(!atualizacao);
        painel.abaEdicaoTabelas.setEnabled(atualizacao);
        painel.painelPrincipal.setEnabled(atualizacao);
        buscaTrab.setEnabled(atualizacao);
        insereTrab.setEnabled(atualizacao);
        removeTrab.setEnabled(atualizacao);
        atualizacao = !atualizacao;
    }

    /** Lê valores digitados, usando-os para fazer a condição do select
     */
    private void lerTrab() {
        condicoes = "WHERE";
        if (idFuTRAB.getText() != null && !idFuTRAB.getText().trim().equals("")) {
            condicoes = condicoes + " idFu = " + idFuTRAB.getText() + " AND ";
        }
        if (idDeTRAB.getText() != null && !idDeTRAB.getText().trim().equals("")) {
            condicoes = condicoes + " idDe = " + idDeTRAB.getText() + " AND ";
        }
        if (dataInicTrTRAB.getText() != null && !dataInicTrTRAB.getText().trim().equals("")) {
            condicoes = condicoes + " dataInicioTr = TO_DATE('" + dataInicTrTRAB.getText() + "', 'DD.MM.YYYY') AND ";
        }
        if (dataFimTrTRAB.getText() != null && !dataFimTrTRAB.getText().trim().equals("")) {
            condicoes = condicoes + " dataFimTr = TO_DATE('" + dataFimTrTRAB.getText() + "', 'DD.MM.YYYY') AND ";
        }
        condicoes = condicoes.substring(0, condicoes.length() - 5);
    }
}
